#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>

typedef struct Nodo {
	int elemento;
	struct Nodo *siguiente;
} nodo;

typedef nodo* cola;

// extern uint16_t posActualCabezal;
int primer_elemento_C1 = 0;
int primer_elemento_C2 = 0;
int extremo_superior_ascendente = 0;
int extremo_superior_descendente = 0;
// int posActualCabezal = 0;


int ultimoElemento_C2;
int ultimoElemento_C1;
cola var_cola;

void INSERTAR_PRIMERO(int x, cola C);
void PONER_EN_COLA(int x, cola C);
cola QUITAR_DE_COLA(int* sector, cola C);
cola CREAR();

void ORDENAR_DESCENDENTE_FSCAN(int sector, cola C1, cola C2) ;
void ORDENAR_ASCENDENTE_FSCAN(int sector, cola C1, cola C2) ;
cola CREAR() {
	cola C;
	C = (nodo *) malloc(sizeof(nodo));
	C->siguiente = NULL;
	C->elemento = 0;
	return C;
}

void INSERTAR_PRIMERO(int x, cola C)

{
	C->elemento = x;
}

void PONER_EN_COLA(int x, cola C)

{
	nodo *actual, *ptr;
	actual = C;
	if ((actual->siguiente) != NULL) {
		while (abs(actual->elemento - x)
			> abs(actual->siguiente->elemento - actual->elemento)) {
			actual = actual->siguiente;
			if ((actual->siguiente) == NULL
			)
				break;
		}
		if ((actual->siguiente) != NULL) {
			if (abs(actual->elemento - x)
					== abs(actual->siguiente->elemento - actual->elemento)) {
				actual = actual->siguiente; // Si la cercania es igual decide por FIFO
			}
		}
	}
	ptr = (nodo *) malloc(sizeof(nodo));
	ptr->elemento = x;
	ptr->siguiente = actual->siguiente;
	actual->siguiente = ptr;
}



void ORDENAR_ASCENDENTE_FSCAN(int  sector, cola C1, cola C2) {
 nodo *actual, *ptr;
 actual = C2;
 int sect_final=199; /* Lo debo sacar del archivo de configuracion */
 if (primer_elemento_C2 < 1) {
 INSERTAR_PRIMERO(sector, C2);
 ptr = (nodo *) malloc(sizeof(nodo)); /* Acá pongo el último sector */
  ptr->elemento = sect_final;
  ptr->siguiente = actual->siguiente;
  actual->siguiente = ptr;
 primer_elemento_C2++;
 sector=ultimoElemento_C2;
 }
 else{
  actual = C2;
 if ((sector) < ultimoElemento_C2)
 {
 ORDENAR_DESCENDENTE_FSCAN(sector,C1,C2);
 }
 else {
 while (actual->siguiente->elemento < sector) {actual = actual->siguiente;}
 ptr = (nodo *) malloc(sizeof(nodo));
 ptr->elemento= sector;
 ptr->siguiente = actual->siguiente;
 actual->siguiente = ptr;
 ultimoElemento_C2=sector;}

 }
 }


 void ORDENAR_DESCENDENTE_FSCAN(int sector, cola C1, cola C2) {
 nodo *actual, *ptr;

 int sect_inicial = 0;
 actual = C1;
 if (primer_elemento_C1 < 1) {
 INSERTAR_PRIMERO(sector, C1);
 ptr = (nodo *) malloc(sizeof(nodo)); /* Acá pongo el primer elemento de la cola nro 1 */
 ptr->elemento = sect_inicial;
 ptr->siguiente = actual->siguiente;
 actual->siguiente = ptr;
 primer_elemento_C1++;
 ultimoElemento_C1=sector;
 } else {
 actual = C1;

 actual = C1;
 if ((ultimoElemento_C1 - sector) < 0)
 {
   ptr = (nodo *) malloc(sizeof(nodo));
    ptr->elemento = actual->elemento;
    ptr->siguiente=actual->siguiente;
    actual->elemento=sector;
    actual->siguiente=ptr;
 } else {
 actual = C1;
 while (actual->siguiente->elemento > sector) {
 actual = actual->siguiente;
 }
 ptr = (nodo *) malloc(sizeof(nodo));
 ptr->elemento = sector;
 ptr->siguiente = actual->siguiente;
 actual->siguiente = ptr;
 ultimoElemento_C1=sector;
 }
 }
 }


cola QUITAR_DE_COLA(int* sector, cola C) {
	cola aux;
	*sector = 0;
	if (C != NULL)
	{
		aux = C;
		*sector = aux->elemento;
		C = C->siguiente;
		free(aux);
		aux = NULL;
	};
	return C;
}


int
main(int argc, char **argv)
{
  int sect_ing, numero1 = 0, i = 0, n = 0, m = 0, numero2 = 0, j = 0, k = 0;
  int parametro_seleccion;
  cola var_cola1 = CREAR();
  cola var_cola2 = CREAR();

  nodo *actual1;
  actual1 = var_cola1;
  nodo *actual2;
  actual2 = var_cola2;

  while (numero1 != (-1) && (i < 15)) // cantidad de numero que voy a ingresar en la COLA 2.
    {
      printf("ingrese el numero de pista: ");
      scanf("%i", &sect_ing);
      printf("el numero que pusiste es %i\n", sect_ing);
      if (sect_ing > 0)
        {
          ORDENAR_ASCENDENTE_FSCAN(sect_ing, var_cola1, var_cola2);
        }

    }

  numero1 = sect_ing;
  i++;
}

